// 这个文件是axios所有的配置
// 封装axios请求 (get,post);
// 引入axios
import router from '@/router';
import axios from 'axios';
// 引入querystring
import qs from 'querystring';

// 基准路径
axios.defaults.baseURL = '/api/';

// 请求拦截
axios.interceptors.request.use(req => {
    // 全局设置请求头
    // 登录成功之后要设置请求头 首次登录没有token 所以不需要判断token
    if (req.url != "userlogin") {
        req.headers.authorization = sessionStorage.getItem('userInfo') ? JSON.parse(sessionStorage.getItem('userInfo')).token : null
    }

    return req
})
// 响应拦截
axios.interceptors.response.use(res => {
    // 全局token错误拦截
    // console.log(res);
    // 正常是通过code码判断  但是这个项目后端返回的都是500所以才通过范湖信息msg进行判断
    if (res.data.msg == "请设置请求头,并携带验证字符串") {
        alert(res.data.msg);
        // 强制跳转登录页
        router.push('/login');
    } else if (res.data.msg == '登录已过期或访问权限受限') {
        alert(res.data.msg);
        // 强制跳转登录页
        router.push('/login');
    } else {
        // 全局错误处理
        return res.data
    }
    // return res.data

})
/*
    封装get请求
    俩个参数:url params={}
    axios.get(url,{})
*/
export const get = (url, params = {}) => {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params
        }).then(res => {
            resolve(res);
        }).catch(err => {
            reject(err);
        })
    })
}

/*
    封装post请求
    三个参数:url,params={},isFile=false(时否为文件上传)
    axios.post(url,params,isFile=false)
    普通上传:application/x-www-form-urlencoded/content-type:application/json 
    文件上传:content-type:multipart/form-data
*/

export const post = (url, params, isFile) => {
    let data = {};
    // 判断是否为文件上传
    if (isFile) {
        // 文件上传
        data = new FormData();//转换formData格式
        // 将传过来的参数循环添加到data中   
        for (let key in params) {
            // 必须使用append进行添加
            data.append(key, params[key]);
        }
    } else {
        // 普通上传
        data = qs.stringify(params);
    }
    return new Promise((resolve, reject) => {
        axios.post(url, data).then(res => {
            resolve(res);
        }).catch(err => {
            reject(err);
        })
    })

}
